package org.jeecg.modules.wms.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.wms.entity.WmsInventory;
import org.jeecg.modules.wms.entity.WmsInventoryHistory;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 库存流水服务接口
 */
public interface IWmsInventoryHistoryService extends IService<WmsInventoryHistory> {
    
    /**
     * 分页查询库存流水
     * 
     * @param page 分页参数
     * @return 分页结果
     */
    IPage<WmsInventoryHistory> queryHistoryPageList(Page<WmsInventoryHistory> page, Map<String, Object> history);
    
    /**
     * 查询库存流水列表
     * 
     * @param query 查询条件
     * @return 库存流水列表
     */
    List<WmsInventoryHistory> queryHistoryList(Map<String, Object> query);
    
    /**
     * 记录库存流水
     * 
     * @param inventory 库存信息
     * @param beforeQuantity 变动前数量
     * @param changeQuantity 变动数量
     * @param afterQuantity 变动后数量
     * @param businessType 业务类型
     * @param businessNo 业务单号
     * @param operator 操作人
     * @param remark 备注
     * @return 是否成功
     */
    boolean recordHistory(WmsInventory inventory, BigDecimal beforeQuantity, BigDecimal changeQuantity, 
                        BigDecimal afterQuantity, Integer businessType, String businessNo, 
                        String operator, String remark);
                        
    /**
     * 记录库存流水（包含成本信息）
     * 
     * @param inventory 库存信息
     * @param beforeQuantity 变动前数量
     * @param changeQuantity 变动数量
     * @param afterQuantity 变动后数量
     * @param beforeTotalCost 变动前总成本
     * @param changeTotalCost 成本变动金额
     * @param afterTotalCost 变动后总成本
     * @param businessType 业务类型
     * @param businessNo 业务单号
     * @param operator 操作人
     * @param remark 备注
     * @return 是否成功
     */
    boolean recordHistoryWithCost(WmsInventory inventory, BigDecimal beforeQuantity, BigDecimal changeQuantity, 
                        BigDecimal afterQuantity, BigDecimal beforeTotalCost, BigDecimal changeTotalCost, 
                        BigDecimal afterTotalCost, Integer businessType, String businessNo, 
                        String operator, String remark);
                        
    /**
     * 获取库存历史统计数据
     * 
     * @param params 查询参数，包含timeRange(day/week/month/year)和其他过滤条件
     * @return 统计数据，包含业务类型分布、物料类型分布和时间趋势数据
     */
    Map<String, Object> getStatisticsData(Map<String, Object> params);
} 